package com.wad.encrypt;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.SecureRandom;

/**
 * @author wad
 * @date 2022/12/1 15:46
 * @project JWT_DEMO2
 **/
public class AESUtil {

//    生成密钥对象
    private static SecretKey generateKey(byte[] key) throws Exception{
//        根据指定的RNG算法，创建安全随机数生成器
        SecureRandom random=SecureRandom.getInstance("SHA1PRNG");
//        设置密钥key的字节数组，作为安全随机数生成器的种子
        random.setSeed(key);

//        创建AES算法生成器
        KeyGenerator generator=KeyGenerator.getInstance("AES");
//        初始化算法生成器
        generator.init(128,random);

//        生成AES密钥对象，也可以直接创建密钥对象：return new SecretKeySpec(key,ALGORITHM)
        return generator.generateKey();
    }


    /**
     * 数据加密
     * @param plainBytes
     * @param key
     * @return
     * @throws Exception
     */

    public static byte[] encrypt(byte[] plainBytes,byte[] key) throws Exception{
//        生成密钥对象
        SecretKey secretKey=generateKey(key);
//        获取AES密码器
        Cipher aes = Cipher.getInstance("AES");
//        初始化密码器（加密模型）
        aes.init(Cipher.ENCRYPT_MODE,secretKey);
//        加密数据返回密文
        return aes.doFinal(plainBytes);
    }


    /**
     * 数据解密
     */

    public static byte[] decrypt(byte[] cipherBytes,byte[] key) throws Exception{
//        生成密钥对象
        SecretKey secretKey=generateKey(key);

//        获取AES密码器
        Cipher aes = Cipher.getInstance("AES");
//        初始化密码器（解密模型）
        aes.init(Cipher.DECRYPT_MODE,secretKey);

//        解密数据，返回明文
        return aes.doFinal(cipherBytes);
    }
}
